##6-1 人：使用一个字典来存储一个熟人的信息，包括名、姓、年龄和居住的城市。该字典应包含键first_name、last_name、age和city。将存储在该字典中的每项信息都打印出来。
user_info = {'first_name':'Sun','last_name':'hai','age':33,'city':'HeFei'}
print(user_info)
print(user_info['first_name'])
print(user_info['last_name'].title())
print(user_info['age'])
print(user_info['city'])

##6-2 喜欢的数字：使用一个字典来存储一些人喜欢的数字。请想出5个人的名字，并将这些名字用作字典中的键；想出每个人喜欢的一个数字，并将这些数字作为值存储在字典中。
## 打印每个人的名字和喜欢的数字。为让这个程序更有趣，通过询问朋友确保数据是真实的。
favorite_nums={
    'xiaohai':3,
    'lisi':13,
    '小强': 7,
    'ruhua': 8,
    '大龙':9
    }
for name,num in favorite_nums.items():
    print(name+'喜欢的数字是: '+ str(num))

##6-3 词汇表：Python字典可用于模拟现实生活中的字典，但为避免混淆，我们将后者称为词汇表。
##·想出你在前面学过的5个编程词汇，将它们用作词汇表中的键，并将它们的含义作为值存储在词汇表中。
##·以整洁的方式打印每个词汇及其含义。为此，你可以先打印词汇，在它后面加上一个冒号，再打印词汇的含义；
##    也可在一行打印词汇，再使用换行符(\n)插入一个空行，然后在下一行以缩进的方式打印词汇的含义。
learn_keywords = {
        'def':'定义函数',
        'int': '数值类型',
        'str': '转成string方法',
        'if' : '条件判断',
        'for': '循环关键字'
    }
for keyword in learn_keywords.keys():
    print(keyword + ':' + learn_keywords[keyword])
    print(keyword)
    print('\t' + learn_keywords[keyword])

    
##6-4
##词汇表2：既然你知道了如何遍历字典，现在请整理你为完成练习6-3而编写的代码，将其中的一系列print语句替换为一个遍历字典中的键和值的循环。
##    确定该循环正确无误后，再在词汇表中添加5个Python术语。当你再次运行这个程序时，这些新术语及其含义将自动包含在输出中。
learn_keywords = {
        'def':'定义函数',
        'int': '数值类型',
        'str': '转成string方法',
        'if' : '条件判断',
        'for': '循环关键字',
         '列表': 'Python中的有序集合，可以存储多个不同类型的元素，用方括号表示',
        '元组': '类似于列表的有序集合，但元素不可修改，用圆括号表示',
        '模块':'包含函数和变量定义的文件，可以通过import语句导入使用',
        '类': '面向对象编程中的蓝图，用于创建具有相同属性和方法的对象',
        '注释': '代码中不会被执行的文本，用于解释代码功能，提高可读性'
}
for keyword,des in learn_keywords.items():
    print(keyword + ':' + des)


##6-5 河流：创建一个字典，在其中存储三条大河流及其流经的国家。其中一个键—值对可能是'nile':'egypt'。
##·使用循环为每条河流打印一条消息，如“The Nile runs through Egypt.”。
##·使用循环将该字典中每条河流的名字都打印出来。
##    ·使用循环将该字典包含的每个国家的名字都打印出来。
river_infos = {
    'nile':'egypt',
    '密西西比河': 'American',
    '黄河': 'China',
    '恒河': '印度',
    '莱茵洒': 'England'
    }
for name,country in river_infos.items():
    print('The ' + name +' runs through ' + country +'.');
for name in river_infos.keys():
    print(name)
for country in river_infos.values():
    print(country)
    
##6-6
##调查：在6.3.1节编写的程序favorite_languages.py中执行以下操作。
##·创建一个应该会接受调查的人员名单，其中有些人已包含在字典中，而其他人未包含在字典中。
##·遍历这个人员名单，对于已参与调查的人，打印一条消息表示感谢。对于还未参与调查的人，打印一条消息邀请他参与调查。
survey_users = ['xiaohai','ruhua','haha','王二','范东']
for user in survey_users:
    if user in favorite_nums:
        print(f'感谢你参与调查:{user.title()},我知道你喜欢的数字是:' + str(favorite_nums[user]))
    else:
        print(user + '我们诚邀你参与调查,请告诉我们你喜欢 的数字！')
    
##    6-7
##人：在为完成练习6-1而编写的程序中，再创建两个表示人的字典，然后将这三个字典都存储在一个名为people的列表中。遍历这个列表，将其中每个人的所有信息都打印出来。
good_persons = {'name' : 'xiaoqiang', 'age' : 19, 'city': 'ShangHai'}
bad_guys = {'name' : 'xiaoqiang2', 'age' : 29, 'city': 'baijing'}
people = [user_info,good_persons,bad_guys]
for p in people:
    print(p)
##6-8
##宠物：创建多个字典，对于每个字典，都使用一个宠物的名称来给它命名；在每个字典中，包含宠物的类型及其主人的名字。将这些字典存储在一个名为pets的列表中，
##    再遍历该列表，并将宠物的所有信息都打印出来。
dog = {'type': '狗', 'name':'hali', 'master':'小强'}
cat = {'type': '狗2', 'name':'hali2', 'master':'小强2'}
pig = {'type': '狗3', 'name':'hali3', 'master':'小强3'}
pets = [dog,cat,pig]
for p in pets:
    print(p)

##6-9
##喜欢的地方：创建一个名为favorite_places的字典。在这个字典中，将三个人的名字用作键；对于其中的每个人，都存储他喜欢的1～3个地方。为让这个练习更有趣些，
##    可让一些朋友指出他们喜欢的几个地方。遍历这个字典，并将其中每个人的名字及其喜欢的地方打印出来。
favorite_places = {'小强':['A1','A2','A3'],'小强2':['A11','A22','A33'],'小强3':['A111','A222','A333']}
for f,p in favorite_places.items():
    print(f + '喜欢的地方:' + str(p))
for f,p in favorite_places.items():
    print(f + '喜欢的地方有:')
    for pi in p:
        print(' -' + pi)
##6-10 喜欢的数字：修改为完成练习6-2而编写的程序，让每个人都可以有多个喜欢的数字，然后将每个人的名字及其喜欢的数字打印出来。
favorite_nums={
    'xiaohai':3,
    'lisi':13,
    '小强': 7,
    'ruhua': 8,
    '大龙':9
    }
favorite_nums['xiaohai'] = [3,33]
favorite_nums['lisi'] = [3,33]
favorite_nums['小强'] = [3,33]
favorite_nums['ruhua'] = [3,33]
favorite_nums['大龙'] = [3,33]
for f,ns in favorite_nums.items():
    print(f + '喜欢的数字：')
    for n in ns:
        print(' -' + str(n))
        
##6-11
##城市：创建一个名为cities的字典，其中将三个城市名用作键；对于每座城市，都创建一个字典，并在其中包含该城市所属的国家、人口约数以及一个有关该城市的事实。
##    在表示每座城市的字典中，应包含country、population和fact等键。将每座城市的名字以及有关它们的信息都打印出来。
cities = {
    '北京':{
        'country': '中国',
        'population': '约2154万',
        'fact': '中国的首都，拥有故宫、长城等著名景点'
     },
    '东京': {
        'country': '日本',
        'population': '约1396万',
        'fact': '日本的首都，是世界上人口密度最高的城市之一'
    },
    '巴黎': {
        'country': '法国',
        'population': '约224万',
        'fact': '以埃菲尔铁塔和艺术博物馆闻名于世'
    }
}
for city,info in cities.items():
    print('城市' + city)
    print('   国家:' + info['country'])
    print('   人口:' + info['population'])
    print('   特点:' + info['fact'])
        
##6-12 扩展：本章的示例足够复杂，可以以很多方式进行扩展了。请对本章的一个示例进行扩展：添加键和值、调整程序要解决的问题或改进输出的格式。
    # 创建扩展的城市信息嵌套字典
cities = {
    '北京': {
        'country': '中国',
        'population': 2154,  # 单位：万
        'fact': '中国的首都，拥有故宫、长城等著名景点',
        'language': '中文',
        'currency': '人民币',
        'famous_food': ['北京烤鸭', '炸酱面']
    },
    '东京': {
        'country': '日本',
        'population': 1396,
        'fact': '日本的首都，是世界上人口密度最高的城市之一',
        'language': '日语',
        'currency': '日元',
        'famous_food': ['寿司', '拉面']
    },
    '巴黎': {
        'country': '法国',
        'population': 224,
        'fact': '以埃菲尔铁塔和艺术博物馆闻名于世',
        'language': '法语',
        'currency': '欧元',
        'famous_food': ['法棍', '马卡龙']
    },
    '纽约': {
        'country': '美国',
        'population': 862,
        'fact': '联合国总部所在地，拥有自由女神像',
        'language': '英语',
        'currency': '美元',
        'famous_food': ['热狗', '披萨']
    },
    '悉尼': {
        'country': '澳大利亚',
        'population': 523,
        'fact': '以标志性的悉尼歌剧院闻名',
        'language': '英语',
        'currency': '澳元',
        'famous_food': ['澳洲牛排', '鱼薯']
    }
}

# 遍历字典并打印每个城市的详细信息
print("===== 世界城市信息 =====")
for city, info in cities.items():
    print(f"\n【{city}】")
    print(f"  国家: {info['country']}")
    print(f"  人口: 约{info['population']}万")
    print(f"  官方语言: {info['language']}")
    print(f"  货币: {info['currency']}")
    print(f"  城市特点: {info['fact']}")
    print(f"  著名美食:")
    for food in info['famous_food']:
        print(f"    - {food}")

# 增加统计功能
print("\n\n===== 城市统计 =====")
total_population = sum(info['population'] for info in cities.values())
print(f"所有城市总人口: 约{total_population}万")

countries = set(info['country'] for info in cities.values())
print(f"涉及国家数量: {len(countries)}个")
print(f"涉及国家: {', '.join(countries)}")

















    
